package com.alisiwei.util;

/**
 * @文件名 StringGenerator.java
 * @包名 com.sheep.test
 * @说明 随机生成一个字符串
 * @作者 zdyang
 * @时间 2014-4-8 上午10:06:18
 * @版本 V1.0
 */
import java.util.Random;


/**
 * @类名 StringGenerator
 * @描述 随机生成一个字符串  字符串范围为0-9a-zA-Z
 */
public class StringGenerator {

    /**
     * 
     * @param max
     *            必须大于0
     */
    public StringGenerator(int max) {
        maxLen = max;
        minLen = 1;
    }

    /**
     * 
     * @param min
     *            必须大于0
     * @param max
     *            必须不小于min
     */
    public StringGenerator(int min, int max) {
        maxLen = max;
        minLen = min;
    }

    /**
     * min length of the string
     */
    private int maxLen;

    /**
     * max length of the string
     */
    private int minLen;

    /**
     * 
     * @param min
     *            必须大于0
     * @param max
     *            必须不小于min
     */
    public void setup(int min, int max) {
        minLen = min;
        maxLen = max;
    }

    /**
     * 根据设置的max和min的长度,生成随机字符串.
     * <p/>
     * 若max或min小于0,则返回null
     * 
     * @return 生成的字符串
     */
    public String next() {
        if (maxLen <= 0 || minLen <= 0 || minLen > maxLen)
            return null;
        char[] buf = new char[random(minLen, maxLen)];
        for (int i = 0; i < buf.length; i++)
            buf[i] = CharGenerator.next();
        return new String(buf);
    }
    
    private static Random r = new Random();

    /**
     * 根据一个范围，生成一个随机的整数
     * 
     * @param min
     *            最小值（包括）
     * @param max
     *            最大值（包括）
     * @return 随机数
     */
    private int random(int min, int max) {
        return r.nextInt(max - min + 1) + min;
    }
    
    /**
     * @类名 CharGenerator
     * @描述 单个字符 随机生成类 
     */
    private static class CharGenerator {
    	
        private CharGenerator() {}
        
        private static final char[] src = "1234567890_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".toCharArray();

        /**
         * @方法名 next 
         * @描述 随机生成一个字符
         * @return char
         */
        public static char next() {
            return src[Math.abs(r.nextInt(src.length))];
        }
    }
}